package com.ww.java8.fp.stream.parallel;

import java.util.Arrays;
import java.util.stream.IntStream;

public class ParallelStreamDemo {

    public static void main(String[] args) {
        test01();
    }

    static void test01() {
        System.out.println("=======================");
        System.out.println("使用顺序流");
        System.out.println("=======================");
        int[] array = {1, 2, 3, 3, 45, 6, 8, 9, 10, 20, 21, 31, 98};
        IntStream intStream = Arrays.stream(array);
        intStream.forEach(s -> System.out.println(s + " " + Thread.currentThread().getName()));
        System.out.println("=======================");
        System.out.println("使用并行流");
        System.out.println("=======================");
        // 在内部使用Fork和Join池创建和管理线程，并行流通过静态ForkJoinPool.commonPool()方法创建ForkJoinPool实例
        // 并行流利用所有CPU内核的优势，并行处理任务，如果任务数超过内核数，则其余任务将等待当前正在运行的任务完成。
        IntStream parallelStream = Arrays.stream(array).parallel();
        parallelStream.forEach(s -> System.out.println(s + " " + Thread.currentThread().getName()));
    }
}
